package com.qdlc.p2p.biz.tpp.model;

import com.qdlc.p2p.common.constant.SinaConstant;
import com.qdlc.p2p.common.util.DateUtil;
import com.qdlc.p2p.common.util.OrderNoUtil;
import com.qdlc.p2p.common.util.StringUtil;
import com.qdlc.p2p.dal.common.SystemConfigHelper;
import com.qdlc.p2p.dal.common.SystemConfigHelper.Nid;

/**
 * 新浪充值
 * @author zlhx
 * @version 2.0
 * @date 2015年8月10日 下午5:32:44
 */
public class SinaRecharge extends SinaModel {
	
	public SinaRecharge(String identity_id,String amount, String bank, int user_nature){
		super();
		/*this.setUrl_type(SinaConstant.URL_TYPE_CASH);*/
		this.amount = amount;
		this.out_trade_no = OrderNoUtil.getInstance().getSerialNumber();
        // 商户 设置为基本型
        if(SystemConfigHelper.getValue(Nid.MEMBER_EMAIL).equals(identity_id))
        {
            this.account_type = SinaConstant.ACCOUNT_TYPE_BASIC;
        } else {
            this.account_type = SinaConstant.ACCOUNT_TYPE_SAVING_POT;
        }
		this.pay_method = getPayMethod(bank,user_nature);
		this.setService("create_hosting_deposit");
		this.setEncode(SinaConstant.ENCODE_TRUE);
		this.setRequest_time(DateUtil.dateStr3(DateUtil.getNow()));
		this.setIdentity_type(SinaConstant.IDENTITY_TYPE_UID);
		this.setIdentity_id(identity_id);
		// 新浪回调地址
		String webUrl = SystemConfigHelper.getValue(Nid.WEB_URL);
		this.setReturn_url(webUrl+"/tpp/tppSinaAction/tppRechargeReturn.html");
		this.setNotify_url(webUrl+"/tpp/tppSinaAction/tppRechargeNotify.html");
		
	}
	
	public String getPayMethod(String bank, int user_nature){
		if (StringUtil.isBlank(bank)) {
			bank = SinaConstant.SINAPAY;
		}
		//企业用户，卡属性为对公
		String str = "";
		if (user_nature == 2) {
			str = SinaConstant.PAY_METHOD_ONLINE_BANK+"^"+amount+"^"+bank+","+SinaConstant.BANK_TYPE_DEBIT+","+SinaConstant.BANK_ATTR_B;
		//个人用户，卡属性为对私
		} else {
			str = SinaConstant.PAY_METHOD_ONLINE_BANK+"^"+amount+"^"+bank+","+SinaConstant.BANK_TYPE_DEBIT+","+SinaConstant.BANK_ATTR_C;
		} 
		return str;
	}
	
	
	/**
	 * 交易订单号
	 * 类型(长度)：String(32)
	 */
	private String out_trade_no;
	
	/**
	 * 充值内容摘要
	 * 类型(长度)：String(64)
	 */
	private String summary;
	
	/**
	 * 账户类型（基本户、保证金户,存钱罐），默认基本户
	 * 类型(长度)：String(16)
	 */
	private String account_type;
	
	/**
	 * 金额 精确到小数点后两位
	 * 类型(长度)：Number(15,2)
	 */
	private String amount;
	
	/**
	 * 手续费
	 * 类型(长度)：Number(15,2)
	 */
	private String user_fee;
	
	/**
	 * 付款用户 公网IP 
	 * 类型(长度)：String(32)
	 */
	private String payer_ip;
	
	/**
	 * 支付方式
	 * 类型(长度)：String(1000)
	 */
	private String pay_method;

	/**
	 * 充值状态
	 * 类型(长度)：String(16)
	 */
	private String deposit_status;
	
	/**
	 * 如果支付需要推进则会返回此参数，支付推进时需要带上此参数，ticket有效期为15分钟，只能使用一次
	 * 类型(长度)：String(100)
	 */
	private String ticket;
	
	
	/**
	 * 待签名字符数组
	 */
	private String[] signParamNames= new String[]{"service","version","request_time","partner_id","_input_charset","out_trade_no","identity_id","identity_type","account_type","amount","pay_method","return_url","notify_url"};
	/**
	 * 提交签名字符数组
	 */
	private String[] subParamNames = new String[]{"service","version","request_time","partner_id","_input_charset","out_trade_no","identity_id","identity_type","account_type","amount","pay_method","return_url","notify_url","sign","sign_type"};
	
	
	
	//======================get/set===============================
	
	/**
	 * 获取 交易订单号 
	 * 类型(长度)：String(32)
	 * @return 
	 */
	public String getOut_trade_no() {
		return out_trade_no;
	}
	
	/**
	 * 设置 交易订单号 
	 * 类型(长度)：String(32)
	 * @param 
	 */
	public void setOut_trade_no(String out_trade_no) {
		this.out_trade_no = out_trade_no;
	}

	/**
	 * 获取 充值内容摘要 
	 * 类型(长度)：String(64)
	 * @return 
	 */
	public String getSummary() {
		return summary;
	}

	/**
	 * 设置 获取 充值内容摘要 
	 * 类型(长度)：String(64)
	 */
	public void setSummary(String summary) {
		this.summary = summary;
	}

	/**
	 * 获取 账户类型（基本户、保证金户,存钱罐），默认基本户 
	 * 类型(长度)：String(16)
	 * @return 
	 */
	public String getAccount_type() {
		return account_type;
	}

	/**
	 * 设置 账户类型（基本户、保证金户,存钱罐），默认基本户 
	 * 类型(长度)：String(16)
	 */
	public void setAccount_type(String account_type) {
		this.account_type = account_type;
	}

	/**
	 * 获取 金额 精确到小数点后两位 
	 * 类型(长度)：Number(15,2)
	 * @return 
	 */
	public String getAmount() {
		return amount;
	}

	/**
	 * 设置  金额 精确到小数点后两位 
	 * 类型(长度)：Number(15,2)
	 * @param 
	 */
	public void setAmount(String amount) {
		this.amount = amount;
	}

	/**
	 * 获取 手续费 
	 * 类型(长度)：Number(15,2)
	 * @return 
	 */
	public String getUser_fee() {
		return user_fee;
	}

	/**
	 * 设置 手续费 
	 * 类型(长度)：Number(15,2)
	 * @param 
	 */
	public void setUser_fee(String user_fee) {
		this.user_fee = user_fee;
	}

	/**
	 * 获取 付款用户 公网IP 
	 * 类型(长度)：String(32)
	 * @return 
	 */
	public String getPayer_ip() {
		return payer_ip;
	}

	/**
	 * 设置 付款用户 公网IP 
	 * 类型(长度)：String(32)
	 * @param 
	 */
	public void setPayer_ip(String payer_ip) {
		this.payer_ip = payer_ip;
	}

	/**
	 * 获取 支付方式 
	 * 类型(长度)：String(1000)
	 * @return 
	 */
	public String getPay_method() {
		return pay_method;
	}

	/**
	 * 设置 支付方式 
	 * 类型(长度)：String(1000)
	 * @param 
	 */
	public void setPay_method(String pay_method) {
		this.pay_method = pay_method;
	}

	/**
	 * 获取 充值状态 
	 * 类型(长度)：String(16)
	 * @return 
	 */
	public String getDeposit_status() {
		return deposit_status;
	}

	/**
	 * 设置 充值状态 
	 * 类型(长度)：String(16)
	 * @param 
	 */
	public void setDeposit_status(String deposit_status) {
		this.deposit_status = deposit_status;
	}

	/**
	 * 获取 支付推进
	 * @return 
	 */
	public String getTicket() {
		return ticket;
	}

	/**
	 * 设置 支付推进
	 * @param 
	 */
	public void setTicket(String ticket) {
		this.ticket = ticket;
	}

	/**
	 * 获取 待签名字符数组
	 * @return 
	 */
	public String[] getSignParamNames() {
		return signParamNames;
	}

	/**
	 * 设置 待签名字符数组
	 * @param 
	 */
	public void setSignParamNames(String[] signParamNames) {
		this.signParamNames = signParamNames;
	}

	/**
	 * 获取 提交签名字符数组
	 * @return 
	 */
	public String[] getSubParamNames() {
		return subParamNames;
	}

	/**
	 * 设置 提交签名字符数组
	 * @param 
	 */
	public void setSubParamNames(String[] subParamNames) {
		this.subParamNames = subParamNames;
	}
}
